package com.city.java.orders.service;

import com.city.java.base.utils.PageVO;
import com.city.java.orders.pojo.entity.Orders;
import com.city.java.base.response.JsonResult;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 订单服务接口
 */
public interface OrderService {
    /**
     * 添加订单
     * @param order 订单对象
     * @return 操作结果
     */
    JsonResult addOrder(Orders order);

    /**
     * 根据订单ID获取订单
     * @param orderId 订单ID
     * @return 订单信息
     */
    JsonResult getOrderById(Long orderId);

    /**
     * 获取所有订单列表
     * @return 订单列表
     */
    JsonResult getAllOrders();

    /**
     * 根据用户ID获取订单列表
     * @param userId 用户ID
     * @return 订单列表
     */
    JsonResult getOrdersByUserId(Long userId);

    /**
     * 根据商品ID获取订单列表
     * @param productId 商品ID
     * @return 订单列表
     */
    JsonResult getOrdersByProductId(Long productId);

    /**
     * 根据商品名称获取订单列表
     * @param productName 商品名称
     * @return 订单列表
     */
    JsonResult getOrdersByProductName(String productName);

    /**
     * 根据订单创建时间范围获取订单列表
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 订单列表
     */
    JsonResult getOrdersByDateRange(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 根据商品名称和时间范围获取订单列表
     * @param productName 商品名称
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 订单列表
     */
    PageVO<Orders> getOrdersByConditions(String productName, LocalDateTime startTime, LocalDateTime endTime, Integer pageNum, Integer pageSize);

    /**
     * 根据订单ID删除订单
     * @param orderId 订单ID
     * @return 操作结果
     */
    JsonResult deleteOrderById(Long orderId);

    /**
     * 更新订单信息
     * @param order 订单对象
     * @return 操作结果
     */
    JsonResult updateOrder(Orders order);
}
